/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package espe.ccsoft.dao;

import espe.ccsoft.models.Rol;
import espe.ccsoft.models.Ruta;
import espe.ccsoft.orm.ORMBase;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

/**
 *
 * @author Carlos
 */
public class RutaDao extends ORMBase<Ruta> {

    public final void insert(final Ruta ruta) throws SQLException, Exception {
        // Sentencia SQL para realizar la consulta a la BD:
        ruta.setEstado(true);
        ruta.setFechaCreacion(new java.sql.Timestamp(new java.util.Date().getTime()));
        super.insertSql = "INSERT INTO RUTA ("
                + "RUT_CODIGO,"
                + "RUT_NOMBRE,"
                + "RUT_INICIOHORA,"
                + "RUT_FINHORA,"
                + "RUT_DISTANCIA,"
                + "RUT_TIPODIA,"
                + "RUT_FECHACREACION,"
                + "RUT_ESTADO,"
                + "RUT_NUMUNIDADES"
                + ") VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)";
        super.insert(new Object[]{
            ruta.getCodigo().toUpperCase(),
            ruta.getNombre().toUpperCase(),
            ruta.getInicioHora(),
            ruta.getFinHora(),
            ruta.getDistancia(),
            ruta.getTipoDia().toUpperCase(),
            ruta.getFechaCreacion(),
            ruta.isEstado(),
            ruta.getNumBuses(),});
    }

    public final void update(final Ruta ruta) throws SQLException, Exception {
        // Sentencia SQL para realizar la consulta a la BD:
        super.updateSql = "UPDATE RUTA SET "
                + "RUT_CODIGO=?,"
                + "RUT_NOMBRE=?,"
                + "RUT_INICIOHORA=?,"
                + "RUT_FINHORA=?,"
                + "RUT_DISTANCIA=?,"
                + "RUT_TIPODIA=?,"
                + "RUT_ESTADO=?, "
                + "RUT_NUMUNIDADES=? "
                + "WHERE RUT_ID=?";
        super.update(new Object[]{
            ruta.getCodigo().toUpperCase(),
            ruta.getNombre().toUpperCase(),
            ruta.getInicioHora(),
            ruta.getFinHora(),
            ruta.getDistancia(),
            ruta.getTipoDia().toUpperCase(),
            ruta.isEstado(),
            ruta.getNumBuses(),
            ruta.getId()});
    }

    public final Ruta findByPK(final int id_ruta) throws SQLException, Exception {
        // Sentencia SQL para realizar la consulta a la BD:
        super.findByPkSql = "select * FROM RUTA"
                + " WHERE RUT_ID=?";
        return super.findByPK(new Object[]{
            id_ruta,});
    }

    public final Ruta findByNombreDia(String nombre, final String dia) throws SQLException, Exception {
        // Sentencia SQL para realizar la consulta a la BD:        
        super.findByPkSql = "SELECT * FROM RUTA"
                + " WHERE RUT_NOMBRE = ? AND RUT_TIPODIA=? AND "
                + "RUT_ESTADO=1";
        return super.findByPK(new Object[]{
            nombre, dia,});
    }

    public final Ruta findByNombre(final String nombre) throws SQLException, Exception {
        // Sentencia SQL para realizar la consulta a la BD:
        super.findByPkSql = "SELECT * FROM RUTA"
                + " WHERE RUT_NOMBRE = ? AND "
                + "RUT_ESTADO=1";
        return super.findByPK(new Object[]{
            nombre,});
    }

    public final List<Ruta> findByNombres(final String nombre) throws SQLException, Exception {
        // Sentencia SQL para realizar la consulta a la BD:
        super.findSomeSql = "SELECT * FROM RUTA"
                + " WHERE RUT_NOMBRE = ? AND "
                + "RUT_ESTADO=1";
        return super.findSome(new Object[]{
            nombre,});
    }
    
    public final List<Ruta> findAllByCodigo(final String codigo) throws Exception{
        
        super.findSomeSql="SELECT * FROM RUTA "
                + "WHERE RUT_CODIGO=? "
                + "AND RUT_ESTADO=1";
        
        return super.findSome(new Object[]{
            codigo,
        });
    }
    
    public final Ruta findOneByCodigo(final String codigo) throws Exception{
        
        super.findByPkSql="SELECT * FROM RUTA "
                + "WHERE RUT_CODIGO=? "
                + "AND RUT_ESTADO=1 "
                + "GROUP BY RUT_NOMBRE";
        
        return super.findByPK(new Object[]{
            codigo,
        });
    }
    
    @Override
    public final List<Ruta> findAll() throws SQLException, Exception {
        // Sentencia SQL para realizar la consulta a la BD:
        super.findAllSql = "SELECT * FROM RUTA WHERE RUT_ESTADO=1 GROUP BY rut_nombre";
        return super.findAll();
    }

    public final List<Ruta> findAllDistinct() throws SQLException, Exception {
        // Sentencia SQL para realizar la consulta a la BD:
        super.findAllSql = "SELECT * FROM RUTA WHERE RUT_ESTADO=1";
        return super.findAll();
    }

    @Override
    protected Ruta crearObjeto(final ResultSet rs) throws SQLException {
        Ruta ruta = new Ruta();
        ruta.setId(rs.getInt("RUT_ID"));
        ruta.setCodigo(rs.getString("RUT_CODIGO"));
        ruta.setNombre(rs.getString("RUT_NOMBRE"));
        ruta.setInicioHora(rs.getTime("RUT_INICIOHORA"));
        ruta.setFinHora(rs.getTime("RUT_FINHORA"));
        ruta.setDistancia(rs.getDouble("RUT_DISTANCIA"));
        ruta.setTipoDia(rs.getString("RUT_TIPODIA"));
        ruta.setFechaCreacion(rs.getTimestamp("RUT_FECHACREACION"));
        ruta.setEstado(rs.getBoolean("RUT_ESTADO"));
        ruta.setNumBuses(rs.getInt("RUT_NUMUNIDADES"));
        return ruta;
    }
}
